/*
142. 环形链表 II
给定一个链表，返回链表开始入环的第一个节点。 如果链表无环，则返回 null。

思路: 快慢指针，相遇后，快指针回到head，一次走一步，相遇则为结果
 */

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var detectCycle = function (head) {
  if (!head || !head.next) {
    return null
  }
  let fast = head
  let slow = head
  do {
    fast = fast.next ? fast.next.next : fast.next
    slow = slow.next
    if (!fast) {
      return null
    }
  } while (fast !== slow)
  fast = head
  while (fast !== slow) {
    fast = fast.next
    slow = slow.next
  }
  return fast
}
